package modelo.bean;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name="cliente")
public class Cliente extends BeanGenerica{

	@Id
	@GeneratedValue
	@Column(name="id_cliente", nullable=false)
	private Integer idCliente;
	
	@Column(name="nr_associado", nullable=false)
	private Integer nrAssociado;
	
	@Column(name="nome", nullable=false)
	private String nome;
	
	@Column(name="sobrenome", nullable=false)
	private String sobreNome;
	
	@Column(name="cpf", nullable=false)
	private String cpf;
	
	@Column(name="dt_nascimento", nullable=false)
	@Temporal(TemporalType.DATE)
	private Date dtNascimento;
	
	@Column(name="cep", nullable=false)
	private String cep;
	
	@Column(name="numero", nullable=false)
	private String numero;
	
	@Column(name="complemento", nullable=true)
	private String complemento;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="fk_estado", insertable=true, updatable=true, nullable=false)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)
	private Estado estado;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="fk_cidade", insertable=true, updatable=true, nullable=false)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)
	private Cidade cidade;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="fk_bairro", insertable=true, updatable=true, nullable=false)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)
	private Bairro bairro;
	
	public Integer getIdCliente() {
		return idCliente;
	}
	public void setIdCliente(Integer idCliente) {
		this.idCliente = idCliente;
	}
	public Integer getNrAssociado() {
		return nrAssociado;
	}
	public void setNrAssociado(Integer nrAssociado) {
		this.nrAssociado = nrAssociado;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getSobreNome() {
		return sobreNome;
	}
	public void setSobreNome(String sobreNome) {
		this.sobreNome = sobreNome;
	}
	public String getCpf() {
		return cpf;
	}
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}
	public Date getDtNascimento() {
		return dtNascimento;
	}
	public void setDtNascimento(Date dtNascimento) {
		this.dtNascimento = dtNascimento;
	}
	public String getCep() {
		return cep;
	}
	public void setCep(String cep) {
		this.cep = cep;
	}
	public String getNumero() {
		return numero;
	}
	public void setNumero(String numero) {
		this.numero = numero;
	}
	public String getComplemento() {
		return complemento;
	}
	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}
	public Estado getEstado() {
		return estado;
	}
	public void setEstado(Estado estado) {
		this.estado = estado;
	}
	public Cidade getCidade() {
		return cidade;
	}
	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}
	public Bairro getBairro() {
		return bairro;
	}
	public void setBairro(Bairro bairro) {
		this.bairro = bairro;
	}
	
}